package com.Endurancer.manager.mapper;

import java.util.List;
import java.util.Map;

import com.Endurancer.manager.domain.BlogPost;
import com.Endurancer.manager.domain.dto.BlogDto;
import com.Endurancer.manager.domain.dto.SearchDto;
import com.Endurancer.manager.domain.vo.*;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;

/**
 * 博客详情信息Mapper接口
 *
 * @author Endurancer
 * @date 2025-02-02
 */
public interface BlogPostMapper
{
    /**
     * 查询博客详情信息
     *
     * @param postId 博客详情信息主键
     * @return 博客详情信息
     */
    public BlogPost selectBlogPostByPostId(Long postId);

    /**
     * 查询博客详情信息列表
     *
     * @param blogPost 博客详情信息
     * @return 博客详情信息集合
     */
    public List<BlogPost> selectBlogPostList(BlogPost blogPost);

    /**
     * 新增博客详情信息
     *
     * @param blogPost 博客详情信息
     * @return 结果
     */
    public int insertBlogPost(BlogPost blogPost);

    /**
     * 修改博客详情信息
     *
     * @param blogPost 博客详情信息
     * @return 结果
     */
    public int updateBlogPost(BlogPost blogPost);

    /**
     * 删除博客详情信息
     *
     * @param postId 博客详情信息主键
     * @return 结果
     */
    public int deleteBlogPostByPostId(Long postId);

    /**
     * 批量删除博客详情信息
     *
     * @param postIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBlogPostByPostIds(Long[] postIds);

    List<Map<String, Object>> selectBlogArchives( );


    List<BlogVo> selectBlogByTypeId(Long typeId);

    BlogDetailVo selectBlogDetailById(Long postId);

    List<BlogTopVo> selectByTopBlog();

    List<BlogNewVo> selectByNewBlog();

    BlogTitleVo selectBlogTitle(Long postId);


    BlogItemVo selectBlogCountAndIsItem(@Param("postId") Long postId, @Param("userId")Long userId);

    BlogItemVo selectBlogItem(Long postId);

    BlogItemVo selectUserInteractions(@Param("postId") Long postId, @Param("userId")Long userId);

    List<ArticleVo> selectByTagId(Long tagId);

    List<ArticleVo> selectByThemeId(Long themeId);

    BlogCountVo selectBlogCount();


    List<SearchVo> selectBlogByKeyWord(SearchDto searchDto);

    BlogPageVo selectPageByPostId(Long postId);

    List<MyBlogVo> selectByUserId(Long userId);

    List<MyBlogVo> selectCollect(Long userId);

    @Insert("INSERT INTO mg_blog_post (user_id, theme_id, title, content, image, summary, post_type, create_time, blog_word) VALUES (#{userId}, #{themeId}, #{title}, #{content}, #{image}, #{summary}, #{postType}, #{createTime}, #{blogWord})")
    @Options(useGeneratedKeys = true, keyProperty = "postId")
    Long addBlogPost(BlogPost blogPost);

    BlogDto selectMyBlog(Long postId);
}
